package com.kj.tms.pri.system.menu.service;


import net.sf.json.JSONArray;
import com.kj.tms.common.bean.dto.ReturnData;
import com.kj.tms.common.bean.dto.TreeData;
import com.kj.tms.pri.system.menu.dto.ModuleDto;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * <p>项目名称：system<p>
 * <p>类名称：ModuleService<p>
 * <p>类描述：模块菜单Service<p>
 *
 * @author 创建人：yangruidong
 * @author 创建时间： 2017年10月26日 9:41
 * @author 修改人：yangruidong
 * @author 修改时间：2017年10月26日 9:41
 * @author 修改备注：
 * @version: 2017年10月26日
 */
public interface ModuleService {
    static final  String BASE_URL = "/api/system/module";
    /**
     * 查询模块数据
     *
     * @param moduleDto
     * @return
     */
    @RequestMapping(value = BASE_URL+"/queryByList",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    ReturnData queryByList(@RequestBody(required = false) ModuleDto moduleDto);

    /**
     * @method      [getModuleDto]
     * @description [获取单个module]
     * @author      王国庆
     * @version     1.0
     * @param       map
     * @return      ModuleDto
     * @exception
     * @date        2017年11月09日 16:08
     */
    @RequestMapping(value = BASE_URL+"/getModuleDto",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    ModuleDto getModuleDto(@RequestBody(required = false) Map map);

    /**
    * @method      [checkModuleName]
    * @description [校验模块名称]
    * @author      王国庆
    * @version     1.0
    * @param        moduleDto
    * @return       ReturnData
    * @exception
    * @date        2017年11月16日 16:08
    */
    @RequestMapping(value = BASE_URL+"/checkModuleName",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    ReturnData checkModuleName(@RequestBody(required = false) ModuleDto moduleDto);

    /**
     * 插入
     * @param moduleDto
     */
    @RequestMapping(value = BASE_URL+"/save",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    ReturnData save(@RequestBody(required = false) ModuleDto moduleDto);

    /**
     * 更新
     * @param moduleDto
     */
    @RequestMapping(value = BASE_URL+"/update",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    void update(@RequestBody(required = false) ModuleDto moduleDto);

    /**
     * 删除
     * @param moduleDto
     */
    @RequestMapping(value = BASE_URL+"/delete",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    ReturnData delete(@RequestBody(required = false) ModuleDto moduleDto);

    /**
     * 保存,更新数据
     *
     * @param moduleDto
     */
    @RequestMapping(value = BASE_URL+"/saveOrUpdate",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    void saveOrUpdate(@RequestBody(required = false) ModuleDto moduleDto);

    /**
     * 判断是否为父节点
     *
     * @param moduleDto
     * @return
     */
    @RequestMapping(value = BASE_URL+"/isParent",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    boolean isParent(@RequestBody(required = false) ModuleDto moduleDto);

    /**
     * 获取上级有效标志
     *
     * @param moduleDto
     * @return
     */
    @RequestMapping(value = BASE_URL+"/getParentValid",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    String getParentValid(@RequestBody(required = false) ModuleDto moduleDto);

    /**
     * 获取sequence
     *
     * @param tableName
     * @return
     */
    @RequestMapping(value = BASE_URL+"/getSequence",method = RequestMethod.POST )
    String getSequence(@RequestParam("tableName") String tableName);

    /**
     * 递归设置某节点及其所有子节点的有效标识
     *
     * @param dto
     * @param status
     */
    @RequestMapping(value = BASE_URL+"/setAllValid",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    void setAllValid(@RequestBody(required = false) ModuleDto dto,
                     @RequestParam("status") String status);


    /**
     * @param map 角色id
     * @Title: queryMenuByUserOrg
     * @Description 根据角色查询菜单模块
     * @Method
     * @Return List<MenuDto>
     * @Date: 2017年10月17日 17:54
     * @Author:wangguoqing
     * @version: 2017年10月17日
     */
    @RequestMapping(value = BASE_URL+"/queryMenuByUserOrg",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    List<ModuleDto> queryMenuByUserOrg(@RequestBody(required = false) Map map);

    /**
     * @param MenuDtoList
     * @Title:
     * @Description
     * @Method
     * @Return List<MenuDto> MenuDtoList
     * @Date: 2017年10月17日 18:14
     * @Author:wangguoqing
     * @version: 2017年10月17日
     */
    @RequestMapping(value = BASE_URL+"/getMenu",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    JSONArray getMenu(@RequestBody(required = false) List<ModuleDto> MenuDtoList);


    /**
     * @param @return 设定文件
     * @return JSONArray    返回类型
     * @throws
     * @Title: getSubMenu
     * @Description: 获取下级用户菜单
     */
    @RequestMapping(value = BASE_URL+"/getSubMenu",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    Map<String, Object> getSubMenu(@RequestBody(required = false) ModuleDto model);

    /**
     * 根据角色查询可用的菜单信息
     *
     * @param Id
     * @return
     */
    @RequestMapping(value = BASE_URL+"/queryMenuByRoleId",method = RequestMethod.POST )
    List<ModuleDto> queryMenuByRoleId(@RequestParam("Id") String Id);

    /**
     * 查询菜单树
     *
     * @param roleId
     * @return
     */
    @RequestMapping(value = BASE_URL+"/getTreeData",method = RequestMethod.POST )
    List<TreeData> getTreeData(@RequestParam("roleId") String roleId);

    /**
     * Dto转换到TreeData
     *
     * @param t
     * @return
     * @see [类、类#方法、类#成员]
     */
    @RequestMapping(value = BASE_URL+"/dtoToTreeData",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    TreeData dtoToTreeData(@RequestBody ModuleDto t);

    /**
     * 查询模块列表
     * @param map 查询条件map
     * @return List<ModuleDto>
     */
    @RequestMapping(value = BASE_URL+"/listByConditionMap",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE} )
    List<ModuleDto> listByConditionMap(@RequestBody(required = false) Map map);

    /**
    * @method      [updateValidMark]
    * @description [菜单的禁用启用]
    * @author      王国庆
    * @version     1.0
    * @param        moduleDto
    * @return       ReturnData
    * @exception
    * @date        2017年11月16日 11:38
    */
    @RequestMapping(value = BASE_URL+"/updateValidMark",method = RequestMethod.POST ,consumes = {MediaType.APPLICATION_JSON_UTF8_VALUE})
    ReturnData updateValidMark(@RequestBody(required = false) ModuleDto moduleDto);
}
